// pages/index/auth.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    currentTab: 'login', // 当前选中的标签页：login 或 register
    showPassword: false, // 登录密码是否可见
    showRegPassword: false, // 注册密码是否可见
    loginForm: {
      username: '',
      password: ''
    },
    registerForm: {
      username: '',
      nickname: '',
      password: '',
      confirmPassword: ''
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 如果有tab参数，设置当前标签页
    if (options && options.tab) {
      this.setData({
        currentTab: options.tab
      });
    }
  },

  /**
   * 切换登录/注册标签
   */
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab;
    this.setData({
      currentTab: tab
    });
  },

  /**
   * 切换登录密码可见性
   */
  togglePasswordVisibility() {
    this.setData({
      showPassword: !this.data.showPassword
    });
  },

  /**
   * 切换注册密码可见性
   */
  toggleRegPasswordVisibility() {
    this.setData({
      showRegPassword: !this.data.showRegPassword
    });
  },
  
  /**
   * 登录表单账号输入处理
   */
  onLoginUsernameInput(e) {
    this.setData({
      'loginForm.username': e.detail.value
    });
  },
  
  /**
   * 登录表单密码输入处理
   */
  onLoginPasswordInput(e) {
    this.setData({
      'loginForm.password': e.detail.value
    });
  },
  
  /**
   * 注册表单账号输入处理
   */
  onRegisterUsernameInput(e) {
    this.setData({
      'registerForm.username': e.detail.value
    });
  },
  
  /**
   * 注册表单昵称输入处理
   */
  onRegisterNicknameInput(e) {
    this.setData({
      'registerForm.nickname': e.detail.value
    });
  },
  
  /**
   * 注册表单密码输入处理
   */
  onRegisterPasswordInput(e) {
    this.setData({
      'registerForm.password': e.detail.value
    });
  },
  
  /**
   * 注册表单确认密码输入处理
   */
  onRegisterConfirmPasswordInput(e) {
    this.setData({
      'registerForm.confirmPassword': e.detail.value
    });
  },

  /**
   * 登录方法
   */
  /**
   * 获取用户列表
   * 优先从本地存储获取，如果没有则使用默认用户数据并初始化到本地存储
   */
  getUsers() {
    try {
      // 先尝试从本地存储获取
      const storedUsers = wx.getStorageSync('users');
      if (storedUsers) {
        return storedUsers;
      }
      
      // 如果本地存储没有，使用默认用户数据
      const users = [
        { username: "admin", nickname: "管理员", password: "123456" }
      ];
      
      // 初始化到本地存储
      wx.setStorageSync('users', users);
      return users;
    } catch (error) {
      console.error('获取用户列表失败:', error);
      return [];
    }
  },
  
  /**
   * 保存用户列表到本地存储
   */
  saveUsers(users) {
    try {
      wx.setStorageSync('users', users);
      return true;
    } catch (error) {
      console.error('保存用户列表失败:', error);
      return false;
    }
  },
  
  /**
   * 登录方法
   */
  login() {
    const { username, password } = this.data.loginForm;
    
    // 表单验证
    if (!username) {
      wx.showToast({
        title: '请输入账号',
        icon: 'none'
      });
      return;
    }
    
    if (!password) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      });
      return;
    }
    
    // 显示加载提示
    wx.showLoading({
      title: '登录中...',
    });
    
    try {
      // 获取用户列表（从本地存储或mock文件）
      const users = this.getUsers();
      
      // 去除前后空格
      const trimmedUsername = username.trim();
      const trimmedPassword = password.trim();
      
      // 查找用户
      const user = users.find(u => u.username === trimmedUsername);
      
      // 模拟网络延迟
      setTimeout(() => {
        wx.hideLoading();
        
        // 验证用户是否存在且密码正确
        if (!user) {
          wx.showToast({
            title: '账号不存在，请先注册',
            icon: 'none'
          });
        } else if (user.password !== trimmedPassword) {
          wx.showToast({
            title: '密码错误，请重新输入',
            icon: 'none'
          });
        } else {
          // 登录成功
          const app = getApp();
          const userInfo = {
            nickName: user.nickname || user.username,
            username: user.username,
            avatar: user.avatar // 保存用户头像信息
          };
          
          // 设置登录状态
          app.setLoginStatus(userInfo);
          
          // 如果用户有头像信息，同步到全局头像存储
          if (user.avatar) {
            wx.setStorageSync('userAvatar', user.avatar);
          } else {
            // 如果用户没有头像，清除全局头像存储
            wx.removeStorageSync('userAvatar');
          }
          
          wx.showToast({
            title: '登录成功',
            icon: 'success',
            duration: 1500,
            success: () => {
              // 登录成功后返回个人主页
              setTimeout(() => {
                wx.navigateBack({
                  delta: 1
                });
              }, 1500);
            }
          });
        }
      }, 1000);
    } catch (error) {
      wx.hideLoading();
      console.error('登录失败:', error);
      wx.showToast({
        title: '登录失败，请重试',
        icon: 'none'
      });
    }
  },

  /**
   * 注册方法
   */
  register() {
    // 先获取表单数据
    const registerForm = this.data.registerForm;
    let { username, nickname, password, confirmPassword } = registerForm;
    
    // 调试输出，查看表单数据
    console.log('注册表单数据:', registerForm);
    
    // 去除前后空格
    username = username ? username.trim() : '';
    nickname = nickname ? nickname.trim() : '';
    password = password ? password.trim() : '';
    confirmPassword = confirmPassword ? confirmPassword.trim() : '';
    
    console.log('处理后账号:', username);
    console.log('处理后昵称:', nickname);
    
    // 表单验证
    if (!username) {
      wx.showToast({
        title: '请输入账号',
        icon: 'none'
      });
      return;
    }
    
    if (!nickname) {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      });
      return;
    }
    
    if (!password) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      });
      return;
    }
    
    if (password.length < 6) {
      wx.showToast({
        title: '密码长度不能少于6位',
        icon: 'none'
      });
      return;
    }
    
    if (password !== confirmPassword) {
      wx.showToast({
        title: '两次输入的密码不一致',
        icon: 'none'
      });
      return;
    }
    
    // 显示加载提示
    wx.showLoading({
      title: '注册中...',
    });
    
    try {
      // 获取用户列表（从本地存储或mock文件）
      const users = this.getUsers();
      
      // 检查账号是否已存在
      const existingUser = users.find(u => u.username === username);
      
      // 模拟网络延迟
      setTimeout(() => {
        wx.hideLoading();
        
        if (existingUser) {
          wx.showToast({
            title: '账号已存在，请更换账号',
            icon: 'none'
          });
          return;
        }
        
        // 创建新用户
        const newUser = {
          username: username,
          nickname: nickname,
          password: password // 注意：实际应用中应该加密存储密码
        };
        
        // 将新用户添加到用户列表
        const updatedUsers = [...users, newUser];
        
        // 保存更新后的用户列表到本地存储
        const saveSuccess = this.saveUsers(updatedUsers);
        
        if (!saveSuccess) {
          wx.showToast({
            title: '保存用户数据失败',
            icon: 'none'
          });
          return;
        }
        
        console.log('新用户注册:', newUser);
        console.log('注册后用户列表:', updatedUsers);
        
        // 设置登录状态
        const app = getApp();
        const userInfo = {
          nickName: nickname,
          username: username
        };
        app.setLoginStatus(userInfo);
        
        wx.showToast({
          title: '注册成功',
          icon: 'success',
          duration: 1500,
          success: () => {
            // 注册成功后返回个人主页
            setTimeout(() => {
              wx.navigateBack({
                delta: 1
              });
            }, 1500);
          }
        });
      }, 1000);
    } catch (error) {
      wx.hideLoading();
      console.error('注册失败:', error);
      wx.showToast({
        title: '注册失败，请重试',
        icon: 'none'
      });
    }
  }
})